

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# 数据加载
df = pd.read_csv('data/数据挖掘/TSLA.csv')

# 将Date列转换为datetime类型，并设置为索引
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

# 可视化展示原始数据
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['Close'], label='Close Price')
plt.title('TSLA Close Price Over Time')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.legend()
plt.show()

# 数据预处理：检查数据的平稳性，如果不平稳则可能需要进行差分或其他转换
# 此处为简化示例，假设数据已经是平稳的

# 选择并训练ARIMA模型
# 这里以(5, 1, 0)为例，实际使用时需要通过ACF和PACF图或其他方法来确定合适的参数
model = ARIMA(df['Close'], order=(5, 1, 0))
model_fit = model.fit()

# 预测未来股价（例如预测未来5天的收盘价）
forecast_result = model_fit.forecast(steps=5)

# forecast, stderr, conf_int = model_fit.forecast(steps=5)
# 可视化展示预测结果
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['Close'], label='Actual')
forecast_index = pd.date_range(start=df.index[-1], periods=6, closed='right')
plt.plot(forecast_index[1:], forecast_result, label='Forecast')
plt.fill_between(forecast_index[1:], forecast_result[:, 0], forecast_result[:, 1], color='pink', alpha=0.5)
plt.title('TSLA 收盘价格预测')
plt.xlabel('日期')
plt.ylabel('收盘价')
plt.legend()
plt.show()